//
//  BZSandbox.h
//  BZFoundation
//
//  Created by 郭艺伟 on 2017/10/1.
//  Copyright © 2017年 郭艺伟. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BZSingleton.h"
#pragma mark - 应用固有目录（设定domain与uniqueUserName后会自动添加“/domain/uniqueUserName”）
@interface BZSandbox : NSObject
/**
 *    主程序目录，只能读取不能写入，不会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *appPath;

/**
 *    文档目录（不可再生数据），会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *docPath;

/**
 *    外部请求该应用打开文件目录，会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *docInboxPath;

/**
 *    默认设置以及状态信息存放目录，会被iTunes备份（除cache子目录）
 */
@property (nonatomic, copy, readonly) NSString *libPath;

/**
 *    偏好设置目录，偏好设置文件应该存在在里面（包括从UserDefaults保存），会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *libPrefPath;

/**
 *    缓存目录，系统不会删除这里的文件（需要应用负责清理），不会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *libCachePath;

/**
 *    临时数据缓存目录（应用退出后删除/系统空间不足时删除），不会被iTunes备份
 */
@property (nonatomic, copy, readonly) NSString *tmpPath;

/**
 *    全局沙盒对象
 */
DEF_SHAREDINSTANCE(BZSandbox);
@end

#pragma mark - 应用自定规范目录（适用于多模块隔离）
@interface BZSandbox (BZModuleSandbox)
/**
 *    模块域名（多使用组织域名反写方式，如"com.example.product.im"）
 */
@property (nonatomic, copy, readonly) NSString *domain;

/**
 *    唯一用户名（常见于模块管理多帐号场景，多使用uid，如"123456"）
 */
@property (nonatomic, copy, readonly) NSString *uniqueUserName;

/**
 *    使用模块域名以及唯一用户名来创建一个sandbox对象
 *
 *    @param domain         模块域名
 *    @param uniqueUserName 唯一用户名
 */
+ (instancetype)sandboxWithDomain:(NSString *)domain uniqueUserName:(NSString *)uniqueUserName;
@end
